// 题目描述
// 337. 打家劫舍 III
// 难度
// 中等
// 1710
// 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口，我们称之为 root 。
// 除了 root 之外，每栋房子有且只有一个“父“房子与之相连。一番侦察之后，聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两个直接相连的房子在同一天晚上被打劫 ，房屋将自动报警。
// 给定二叉树的 root 。返回 在不触动警报的情况下 ，小偷能够盗取的最高金额 。
//   示例 1:
// 输入: root = [3,2,3,null,3,null,1]
// 输出: 7
// 解释: 小偷一晚能够盗取的最高金额 3 + 3 + 1 = 7
// 示例 2:
// 输入: root = [3,4,5,1,3,null,1]
// 输出: 9
// 解释: 小偷一晚能够盗取的最高金额 4 + 5 = 9
//   提示：
// 树的节点数在 [1, 104] 范围内
// 0 <= Node.val <= 104
// 通过次数280,492提交次数458,993

function TreeNode(val, left, right) {
  this.val = (val === undefined ? 0 : val)
  this.left = (left === undefined ? null : left)
  this.right = (right === undefined ? null : right)
}

/**
 * @param {TreeNode} root
 * @return {number}
 */
var rob = function (root) {
  const helper = (root) => {
    if (!root) {
      return [0, 0]
    }

    const [l0, l1] = helper(root.left)
    const [r0, r1] = helper(root.right)

    const ans = [
      Math.max(l0, l1) + Math.max(r0, r1),
      root.val + l0 + r0
    ]

    return ans
  }
  const res = helper(root)

  return Math.max(...res)
}

console.log(
  rob(
    new TreeNode(3, new TreeNode(4, new TreeNode(1), new TreeNode(3)), new TreeNode(5, null, new TreeNode(1)))
  )
)








